// ESP32C3无需NTPClient，使用getLocalTime直接获取网络时间、EPOCH Time
/*
configTime(long gmtOffset_sec, int daylightOffset_sec, const char* server1, const char* server2 = nullptr, const char* server3 = nullptr)
参数说明：
gmtOffset_sec 参数就是用来修正时区的，比如对于我们东八区（UTC/GMT+08:00）来说该参数就需要填写 8 * 3600 ；
daylightOffset_sec使用夏令时 daylightOffset_sec 就填写3600，否则就填写0；

bool getLocalTime(struct tm * info, uint32_t ms = 5000)
参数说明：
ms 为该操作超时时间，超时则返回false；
info 是一个 struct tm 结构体对象，用于接收当前时间；

struct tm {
int tm_sec; // 秒，取值0~59；
int tm_min; // 分，取值0~59；
int tm_hour; // 时，取值0~23；
int tm_mday; // 月中的日期，取值1~31；
int tm_mon; // 月，取值0~11；
int tm_year; // 年，其值等于实际年份减去1900；
int tm_wday; // 星期，取值0~6，0为周日，1为周一，依此类推；
int tm_yday; // 年中的日期，取值0~365，0代表1月1日，1代表1月2日，依此类推；
int tm_isdst; // 夏令时标识符，实行夏令时的时候，tm_isdst为正；不实行夏令时的进候，tm_isdst为0；不了解情况时，tm_isdst()为负
};
————————————————
版权声明：本文为CSDN博主「Naisu Xu」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/Naisu_kun/article/details/115627629

%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中，十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字，使用基于周的年
%G 年分，使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟：hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒：hh:mm:ss
%u 每周的第几天，星期一为第一天 （值从0到6，星期一为0）
%U 第年的第几周，把星期日做为第一天（值从0到53）
%V 每年的第几周，使用基于周的年
%w 十进制表示的星期几（值从0到6，星期天为0）
%W 每年的第几周，把星期一做为第一天（值从0到53）
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份（值从0到99）
%Y 带世纪部分的十进制年份
%z，%Z 时区名称，如果不能得到时区名称则返回空字符
————————————————
版权声明：本文为CSDN博主「Naisu Xu」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/Naisu_kun/article/details/115627629

*/

#include <WiFi.h>
#include "time.h"

const char* ssid = "";   // your SSID
const char* pswd = "";   // your PSWD

#define NTP1  "ntp1.aliyun.com"
#define NTP2  "ntp2.aliyun.com"
#define NTP3  "ntp3.aliyun.com"
const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec = 3600 * 8;       // 8 Hours
const int   daylightOffset_sec = 3600 * 0;  // no daylight offset

void setup() {
  Serial.begin(115200);
  delay(1000);

  WiFi.mode(WIFI_STA);            // Optional
  WiFi.begin(ssid, pswd);
  Serial.println("\nConnecting");

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(100);
  }

  Serial.println("\nConnected to the WiFi network");
  Serial.print("Local ESP32 IP: ");
  Serial.println(WiFi.localIP());

  // We configure the NTP server
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
}

void loop() {
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) {
    Serial.println("Failed to obtain time");
  }

  time_t epochTime;
  time(&epochTime);
  Serial.print("Epoch Time: "); Serial.print(epochTime);
  Serial.println(&timeinfo, "  %A, %B %d %Y %H:%M:%S");
  delay(10000);
}


/*
Epoch Time: 1694350038  Sunday, September 10 2023 20:47:18
Epoch Time: 1694350039  Sunday, September 10 2023 20:47:19
Epoch Time: 1694350040  Sunday, September 10 2023 20:47:20
*/